<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if(!class_exists('Api_hb_game')){
    class Api_hb_game extends CI_Controller {

        protected $_action = '';

        protected $_distance = 325;

        public function __construct(){
            parent::__construct();
            $this->load->model('Apilogmodel','m_api_log');
            $this->load->model('Usermodel','m_user');
            $this->load->model('Appmodel','m_app');
            $this->load->model('Hdcustomermodel','m_customer');
            $this->load->model('Hdlotterytimemodel','m_lottery_time');
            $this->load->model('configmodel','m_config');
            $this->load->database();


            $game_deadline = $this->m_config->getConfig(HD_GAME_DEADLINE);
            if(!empty($game_deadline) && strtotime($game_deadline) < time()) {
                $this->response->setDetail('活动已结束!');
                $this->response->responseExit();
            }

            // $this->_action = $this->uri->rsegments[1].'/'.$this->uri->rsegments[2];
            // if($this->session->userdata($this->_action) !== false) {
            //     $this->response->setDetail('请求太快，请稍后再试!');
            //     $this->response->responseExit();
            // }
            // $this->session->set_userdata($this->_action,true);
            // //api开头的不存
            if(is_string($this->uri->rsegments[2]) && stripos($this->uri->rsegments[2], 'api') === 0) {
                return;
            }
            $info = $this->input->post();
            $this->m_api_log->createApiLog(array(
                'ip_address' => $this->input->ip_address(),
                // 'customer_id' => $this->m_app->getCurrentCustomerId(),
                'request_uri' => $_SERVER['REQUEST_URI'],
                'post_data' => json_encode($info),
                'result_data' => '',
                'api_log_time_create' => NOW,
                // 'terminal' => TERMINAL_WEIXIN,
            ));
        }

        public function __destruct() {
            // $this->session->unset_userdata($this->_action);
            $this->db->close();
        }


        public function initCustomer() {
            $this->validate->setRule('openid','string');
            $this->validate->setRule('openid','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('openid_md5','string');
            $this->validate->setRule('openid_md5','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('nickname','string');
            $this->validate->setRule('nickname','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('sex','integer');
            $this->validate->setRule('sex','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('province','string');
            $this->validate->setRule('province','notnull',false);
            $this->validate->setRule('province','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('city','string');
            $this->validate->setRule('city','notnull',false);
            $this->validate->setRule('city','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('country','string');
            $this->validate->setRule('country','notnull',false);
            $this->validate->setRule('country','message',$this->lang->line('error_parameter'));
            $this->validate->setRule('headimgurl','string');
            $this->validate->setRule('headimgurl','notnull',false);
            $this->validate->setRule('headimgurl','message',$this->lang->line('error_parameter'));
            if(!$this->validate->run($this->input->post(),true)){
                $this->response->setDetail($this->validate->getMessage());
                $this->response->responseExit();
            }
            $info = $this->validate->getResult();

            if(md5($info['openid'].FREEDOM_WAR_SALT) != $info['openid_md5']) {
                $this->response->setDetail('请勿恶意访问!');
                $this->response->responseExit();
            }
            unset($info['openid_md5']);


            
            $info['nickname'] = urlencode($info['nickname']);

            $customer = $this->m_customer->getCustomerByOpenid($info['openid']);
            if($customer['customer_status'] == -2) {
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }
            if(empty($customer)) {
                $info['customer_time_create'] = NOW;
                $customer_id = $this->m_customer->createCustomer($info);
                if($customer_id == 0) {
                    $this->response->setDetail('初始化用户失败！请刷新页面！');
                    $this->response->responseExit();
                }
                $customer = $this->m_customer->getCustomer($customer_id);
            } else if($customer['nickname'] != $info['nickname'] || $customer['headimgurl'] != $info['headimgurl']){
                $info['customer_id'] = $customer['customer_id'];
                $this->m_customer->editCustomer($info);
                $customer = $this->m_customer->getCustomer($info['customer_id']);
            }
            $customer['nickname'] = urldecode($customer['nickname']);

            $this->session->set_userdata('hd_game_customer',$customer);

            

            $this->response->setSuccess();
            $this->response->setDetail('提交成功!');
            $this->response->setAddon(array(
                'customer' => $customer,
            ));
            $this->response->responseExit();
        }

        public function submitRunResult() {
            $customer = $this->session->userdata('hd_game_customer');
            if(empty($customer)) {
                $this->response->setDetail('初始化用户失败！请刷新页面重试！');
                $this->response->responseExit();
            }
            if($customer['customer_status'] == -2) {
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }

            $this->validate->setRule('distance','integer');
            if(!$this->validate->run($this->input->post(),true)){
                $this->response->setDetail($this->validate->getMessage());
                $this->response->responseExit();
            }
            $info = $this->validate->getResult();
            
            $closer_percent = 0;
            if($info['distance'] != 325) {
                $total = $this->m_customer->getTotalGameCount();
                $closer_count = $this->m_customer->getLinearWinGameCount($info['distance']);
                $closer_percent = intval($closer_count*100/$total);
            }

            $history_id = $this->m_customer->createHistory(array(
                'customer_id' => $customer['customer_id'],
                'game_score' => $info['distance'],
                'history_time_create' => NOW,
            ));

            $distance_md5 = md5(FREEDOM_WAR_SALT.$history_id.'_'.$info['distance']);
            $this->session->set_userdata('hd_game_distance',$info['distance']);
            $this->session->set_userdata('hd_game_distance_id',$history_id);


            $this->response->setSuccess();
            $this->response->setDetail('提交成功!');
            $this->response->setAddon(array(
                'salt' => $distance_md5,
                'closer_percent' => $closer_percent,
            ));
            $this->response->responseExit();
        }

        public function drawnLottery() {
            $customer = $this->session->userdata('hd_game_customer');
            if(empty($customer)) {
                $this->response->setDetail('初始化用户失败！请刷新页面重试！');
                $this->response->responseExit();
            }
            if($customer['customer_status'] == -2) {
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }

            $this->validate->setRule('salt','string');
            if(!$this->validate->run($this->input->post(),true)){
                $this->response->setDetail($this->validate->getMessage());
                $this->response->responseExit();
            }
            $info = $this->validate->getResult();

            $current_distance = $this->session->userdata('hd_game_distance');
            $history_id =  $this->session->userdata('hd_game_distance_id');
            $this->session->unset_userdata('hd_game_distance');
            $this->session->unset_userdata('hd_game_distance_id');
            if($current_distance != $this->_distance) {
                $this->response->setDetail('您未能跑到235米，不能抽奖哦!');
                $this->response->responseExit();
            }
            if(md5(FREEDOM_WAR_SALT.$history_id.'_'.$current_distance) != $info['salt']) {
                $this->response->setDetail('请重新刷新页面！');
                $this->response->responseExit();
            }

            $time = time();
            $last_time = $this->m_customer->getLastLotteryTime($customer['customer_id']);
            if($time - $last_time < 15) {
                $this->m_customer->editCustomer(array(
                    'customer_id' => $customer['customer_id'],
                    'customer_status' => -2,
                ));
                $customer = $this->m_customer->getCustomer($customer['customer_id']);
                $customer['nickname'] = urldecode($customer['nickname']);
                $this->session->set_userdata('hd_game_customer',$customer);
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }
            
            $customer = $this->m_customer->getCustomerByOpenid($customer['openid']);

            $lottery_result = 0;

            $lottery_time_id=0;

            $lottery_time_gift1_rate = 0;
            $lottery_time_gift2_rate = 0;
            $lottery_time_gift3_rate = 0;
            $lottery_time_gift4_rate = 0;

            $baseNum = 1000000000;

            $lotteryTime = $this->m_lottery_time->getCurrentLotteryTimeRate();
            if(!empty($lotteryTime)) {
                $lottery_time_id = $lotteryTime['lottery_time_id'];
                $lottery_time_gift1_rate = floatval($lotteryTime['lottery_time_gift1_rate']);
                $lottery_time_gift2_rate = floatval($lotteryTime['lottery_time_gift2_rate']);
                $lottery_time_gift3_rate = floatval($lotteryTime['lottery_time_gift3_rate']);
                $lottery_time_gift4_rate = floatval($lotteryTime['lottery_time_gift4_rate']);

                $num = rand(1,$baseNum);

                if($customer['gift_type'] == 0) {
                    if($lottery_result == 0 && $lottery_time_gift1_rate > 0 && $num <= $lottery_time_gift1_rate*$baseNum
                        && intval($lotteryTime['lottery_time_gift1_count']) > intval($lotteryTime['lottery_time_gift1_count_drawn'])) {
                        $lottery_result = 1;
                    }
                    if($lottery_result == 0 && $lottery_time_gift2_rate > 0 && $num <= ($lottery_time_gift1_rate + $lottery_time_gift2_rate)*$baseNum
                        && intval($lotteryTime['lottery_time_gift2_count']) > intval($lotteryTime['lottery_time_gift2_count_drawn'])) {
                        $lottery_result = 2;
                    }
                    if($lottery_result == 0 && $lottery_time_gift3_rate > 0 && $num <= ($lottery_time_gift1_rate+$lottery_time_gift2_rate+$lottery_time_gift3_rate)*$baseNum
                        && intval($lotteryTime['lottery_time_gift3_count']) > intval($lotteryTime['lottery_time_gift3_count_drawn'])) {
                        $lottery_result = 3;
                    }
                    if($lottery_result == 0 && $lottery_time_gift4_rate > 0 && $num <= ($lottery_time_gift1_rate+$lottery_time_gift2_rate+$lottery_time_gift3_rate+$lottery_time_gift4_rate)*$baseNum
                        && intval($lotteryTime['lottery_time_gift4_count']) > intval($lotteryTime['lottery_time_gift4_count_drawn'])) {
                        $lottery_result = 4;
                    }
                }
            }

            //记录数据库
            $this->m_customer->createLotteryHistory(array(
                'customer_id' => $customer['customer_id'],
                'lottery_time_id' => empty($lotteryTime) ? 0 : $lotteryTime['lottery_time_id'],
                'history_id' => $history_id,
                'gift_type' => $lottery_result,
                'lottery_time_time_create' => NOW,
            ));


            $this->m_customer->updateCustomerLotteryCount($customer['customer_id']);

            if($lottery_result > 0) {
                $this->m_customer->editCustomer(array(
                    'customer_id' => $customer['customer_id'],
                    'gift_type' => $lottery_result,
                    'customer_time_lottery' => NOW,
                ));
                $this->m_lottery_time->updateLotteryCountDrawn($lottery_time_id,$lottery_result);
            }

            $customer = $this->m_customer->getCustomer($customer['customer_id']);
            $customer['nickname'] = urldecode($customer['nickname']);
            $this->session->set_userdata('hd_game_customer',$customer);
            
            global $g_hd_game_gift;
            $addon = array();
            $addon['gift_type'] = $lottery_result;
            $addon['gift_name'] = id2name($lottery_result,$g_hd_game_gift);

            $this->response->setSuccess();
            $this->response->setAddon($addon);
            $this->response->responseExit();
        }

        public function getLotteryCustomerList() {
            $customer = $this->session->userdata('hd_game_customer');
            if(empty($customer)) {
                $this->response->setDetail('初始化用户失败！请刷新页面重试！');
                $this->response->responseExit();
            }
            if($customer['customer_status'] == -2) {
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }


            $assist['select'] = 'nickname,gift_type';
            $assist['where']['gift_type >'] = 0;
            $assist['sort'] = array('key' => 'customer_time_lottery', 'dir' => 'DESC');
            list($list,$count) = $this->m_customer->getCustomerListSection($assist);

            global $g_hd_game_gift;
            foreach ($list as $key => $value) {
                $list[$key]['nickname'] = urldecode($value['nickname']);
                $list[$key]['gift_name'] = id2name($value['gift_type'],$g_hd_game_gift);
            }

            $this->response->setSuccess();
            $this->response->setItems($list);
            $this->response->setTotalCount($count);
            $this->response->responseExit();
        }

        public function submitAddress() {
            $customer = $this->session->userdata('hd_game_customer');
            if(empty($customer)) {
                $this->response->setDetail('初始化用户失败！请刷新页面重试！');
                $this->response->responseExit();
            }
            if($customer['customer_status'] == -2) {
                $this->response->setDetail('您存在恶意刷屏!');
                $this->response->responseExit();
            }

            if($customer['gift_type'] == 0) {
                $this->response->setDetail('您还未中奖!');
                $this->response->responseExit();
            }

            $this->validate->setRule('customer_name','string');
            $this->validate->setRule('customer_name','message','请填您的姓名');
            $this->validate->setRule('customer_phone','string');
            $this->validate->setRule('customer_phone','message','请填您的手机号');
            $this->validate->setRule('customer_address','string');
            $this->validate->setRule('customer_address','message','请填您的收货地址');
            if(!$this->validate->run($this->input->post(),true)){
                $this->response->setDetail($this->validate->getMessage());
                $this->response->responseExit();
            }
            $info = $this->validate->getResult();

            if(!preg_match("/^1[0-9]\d{9}$/i", $info['customer_phone'])){
                $this->response->setDetail('请输入正确的手机号码!');
                $this->response->responseExit();
            }

            
            $info['customer_id'] = $customer['customer_id'];
            $this->m_customer->editCustomer($info);

            $customer = $this->m_customer->getCustomer($customer['customer_id']);
            $this->session->set_userdata('hd_game_customer',$customer);
            
            $this->response->setSuccess();
            $this->response->setDetail('收货地址提交成功!');
            $this->response->responseExit();
        }

        public function dbview() {
            die();
            $data['desc'] = '清除北京现代数据';
            $data['ctrlName'] = $this->uri->rsegments[1];
            $this->load->view('zm/clear_db',$data);
        }
        public function clearDb(){
            die();
            $this->db->truncate('hd_game_customer'); 
            $this->db->truncate('hd_game_history'); 
            $this->db->truncate('hd_game_lottery_history'); 
            // $this->db->truncate('hd_game_lottery_time'); 
            // $this->db->truncate('hd_game_lottery_time_history'); 
            

            $this->response->setSuccess();
            $this->response->setDetail('清除成功!');
            $this->response->responseExit();
        }
    }
    
}